class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm
    // data中的属性名
    this.key = key
    // 回调函数负责更新视图
    this.cb = cb
    //* 把watcher注册到Dep的静态属性target
    Dep.target = this
    //* 触发get方法，在get方法中调用addSub
    this.oldValue = vm[key]
    //* 注册成功之后把target重置为null，避免重复注册
    Dep.target = null
  }

  //* 数据变化时使用cb更新视图
  update() {
    let newValue = this.vm[this.key]
    if (this.oldValue === newValue) {
      return
    }

    this.cb(newValue)
  }

  //* 实例创建时添加自身到Dep
}